import { defineStore } from "pinia";
// 使用本地数据
import { userinfo } from '@/mock/userinfo'
import { login, getUserInfo } from '@/api/sys.ts'
import md5 from 'md5'
// import { removeLogout } from '@/utils/storage.ts'
import { setTimeStamp } from '@/utils/auth.ts'

import router from '@/router'
import { useAppStore } from "@/store/app.ts";

export const useUserStore = defineStore('user',{
  state:()=>{
    return {
      // token: getItem(TOKEN) || '',
      token: '',
      userInfo:{}
    }
  },
  getters:{
    hasUserInfo: (state) => {
      return JSON.stringify(state.userInfo) !== '{}'
    },
  },
  actions:{
    login(userInfo) {
      // console.log('userInfo',userInfo)
      const { username, password } = userInfo
      return new Promise((resolve, reject) => {
        login({
          username,
          password: md5(password)
        })
          .then((data) => {
            console.log(data)
            this.token = data.token
            // this.setToken(data.token)  // 之前的缓存token
            // 登录后操作
            // 保存登录时间
            setTimeStamp()
            resolve(data)
          })
          .catch((err) => {
            reject(err)
          })
      })
    },
    async getUserInfo() {
      await getUserInfo()
      const res = userinfo.data
      this.userInfo = res
      return res
    },
    logout() {
      // 清除vuex
      this.token = ''
      this.userInfo = {}
      // 清除token
      const appStore = useAppStore()
      appStore.tagsViewList = []
      // TODO: 清理权限相关配置
      router.push('/login')
    },

    setToken(token) {
      this.token = token
      // setItem(TOKEN, token)
    },
    setUserInfo(userInfo:any) {
      this.userInfo = userInfo
    }
  },
  // persist:true,
  //按需配置数据持久化 这里指定变量num保持持久化
  persist:{
    //默认名称为当前store唯一标识 这里即home
    // key:'user',
    //默认localStorage 本地储存
    //这里建议临时储存sessionStorage 也可写成window.sessionStorage
    // storage:sessionStorage,
    //默认当前store里的所有变量都持久化
    paths:['token']
  }

})

